
`include "reg_cnt_defs.v"

`timescale 1ns / 1ps

module reg_cnt(
	clk,
	i_rld,
	i_cmd,
	i_data,
	o_data,
	o_zero
);

parameter DATA_WIDTH 	= 12;

input clk;
input i_rld;
input [DATA_WIDTH-1:0]						i_data;
input [`REG_CNT_CMD_WIDTH-1:0]		i_cmd;

output 	[DATA_WIDTH-1:0]	o_data;
reg 		[DATA_WIDTH-1:0]	o_data;

output o_zero;

always@( posedge clk )
begin
	if( i_rld == 1'b1 ) begin
		o_data <= i_data;
	end
	else begin
		case( i_cmd )
			`REG_CNT_CMD_DEC: begin
				o_data <= o_data - 1;
			end
			`REG_CNT_CMD_LOAD: begin
				o_data <= i_data;
			end
			default: begin
				o_data <= o_data;
			end
		endcase 
	end
end

assign o_zero = ( o_data == 0 ) ? 1'b1 : 0'b0 ;

endmodule
